function vec(x, y, z) {
    this.x = x;
    this.y = y;
    this.z = z;
    return this;
}

print((new vec(10, 20, 30)).x);

//function vadd(a, b) {
//    return new vec(a.x + b.x, a.y + b.y, a.z + b.z);
//}
//
//function vsub(a, b) {
//    return new vec(a.x - b.x, a.y - b.y, a.z - b.z);
//}
//
//function vcross(a, b) {
//    return new vec(a.y * b.z - a.z * b.y,
//                   a.z * b.x - a.x * b.z,
//                   a.x * b.y - a.y * b.x);
//}
//
//function vdot(a, b) {
//    return (a.x * b.x + a.y * b.y + a.z * b.z);
//}
//
//function vlength(a) {
//    return Math.sqrt(a.x * a.x + a.y * a.y + a.z * a.z);
//}
//
//function vnormalize(a) {
//    var len = vlength(a);
//    var v = new vec(a.x, a.y, a.z);
//    if (Math.abs(len) > 1.0e-17) {
//        v.x /= len;
//        v.y /= len;
//        v.z /= len;
//    }
//    return v;
//}

function Ray(org, dir)
{
    this.org = org;
    this.dir = dir;
    return this;
}
function Sphere(center, radius)
{
    this.center = center;
    this.radius = radius;

    this.intersect = function (ray, isect) {
        print(ray);
        print(isect);
        print(10);
        return this;
    };
}

function Isect()
{
    this.t   = 1000000.0;
    this.hit = false;
    this.p   = new vec(0.0, 0.0, 0.0);
    this.n   = new vec(0.0, 0.0, 0.0);
    return this;
}

var isect = Isect();
print(isect.t);
print(isect.hit);
print(isect.p.y);
print(isect.n.z);
